package Day024_枚举_正则表达式.demo3_Base64;

import java.util.Base64;

/**
 * @Author：pengzhilin
 * @Date: 2020/5/18 11:05
 */
public class Test2 {
    public static void main(String[] args) {
        /*
            Base64概述
                    - Base64是jdk8提出的一个新特性,可以用来进行按照一定规则编码和解码
            编码的步骤:
                    1.获取指定类型编码器
                    2.调用编码器的编码方法进行编码
            解码的步骤:
                    1.获取指定类型解码器
                    2.调用解码器的解码方法进行解码
            Base64工具类提供了一套静态方法获取下面三种BASE64编解码器：
                - 基本：输出被映射到一组字符A-Za-z0-9+/，编码不添加任何行标，输出的解码仅支持A-Za-z0-9+/。
                - URL：输出映射到一组字符A-Za-z0-9+_，输出是URL和文件。
                - MIME：输出隐射到MIME友好格式。输出每行不超过76字符，并且使用'\r'并跟随'\n'作为分割。编码输出最后没有行分割。

            获取编码器和解码器的方法:
                static Base64.Decoder getDecoder() 基本型 base64 解码器。
                static Base64.Encoder getEncoder() 基本型 base64 编码器。

                static Base64.Decoder getUrlDecoder() Url型 base64 解码器。
                static Base64.Encoder getUrlEncoder() Url型 base64 编码器。

                static Base64.Decoder getMimeDecoder() Mime型 base64 解码器。
                static Base64.Encoder getMimeEncoder() Mime型 base64 编码器。


            Encoder编码器:  String encodeToString(byte[] bys) 编码
            Decoder解码器:  String decode(String str) 解码
         */
        // 使用URL型的编码器和解码器对数据进行编码和解码:
        // 1.获取编码器
        Base64.Encoder encoder = Base64.getUrlEncoder();

        // 2.对字符串进行编码
        String str = "name=中国?password=123456";
        String str1 = encoder.encodeToString(str.getBytes());

        // 3.打印输出编码后的字符串
        System.out.println("编码后的字符串:"+str1);

        // 4.获取解码器
        Base64.Decoder decoder = Base64.getUrlDecoder();

        // 5.对编码后的字符串进行解码
        byte[] bys = decoder.decode(str1);
        String str2 = new String(bys);

        // 6.打印输出解码后的字符串
        System.out.println("解码后的字符串:"+str2);
    }
}
